class_name _CodeEditor_Setget_RegexUtil


var pattern_setget = ""
var pattern_property = ""
var pattern_line_func = ""


var regex_setget : RegEx = RegEx.new()
var regex_property : RegEx = RegEx.new()
var regex_line_func : RegEx = RegEx.new()


func _init():
	# 匹配 Setget
	pattern_setget = "setget\\s+(?<set>\\w+)?\\s*(,\\s*(?<get>\\w+))?"
	regex_setget.compile(pattern_setget)
	
	# 匹配属性
	pattern_property = (
		"^(?<code>"
		
		# 判断开头
		+ "("
			# export 开头
			+ "export\\s*"
			+ "(?<hint>\\([^\\)]+\\)\\s*)?" # hint 导出标识
			+ "var\\s+"		# var
			
			#onready 开头
			+ "|"
			+ "onready\\s+"
			+ "var\\s+?"		# var
			
			# var 开头
			+ "|"
			+ "var\\s+"
		+ ")"
		
		+ "(?<name>[^\\s:]+)\\s*?"	# name 方法名
		+ "(\\s*:\\s*)?"		# : 冒号
		+ "(?<type>\\w+)?"		# type 类型
		
		# 变量值
		+ "(\\s*=\\s*"	# 等号
			+ "(?<value>[^#\n\\s]+)?"	# 直到不是 # 或者回车的位置
			+ ")?"
		
		# setget
		+ "(?<setget>\\s*setget\\s+(\\w+)?(\\s*,\\s*\\w+)?)?"
		
		+ ")"	# 代码
		
		
		+ "(?<comments>\\s*#[^\n]*)?"	# 注释
	)
	regex_property.compile(pattern_property)
	
	
	# 匹配一行方法信息
	pattern_line_func = (
		"\n"
		+ "(static\\s+)?"		# static
		+ "func\\s+?"			# func
		+ "(?<name>[^\\(]+)"	# 方法名
		+ "\\("
		+ "(?<arg>[^)]+)?"		# 参数
		+ "\\)"
		+ "(\\s*->\\s*(?<type>\\w+))?"	# 返回类型
		+ "\\s*:\\s*"			# 末尾冒号
	)
	regex_line_func.compile(pattern_line_func)
	
	
	
	

